package common.util;

import common.bean.TreeNode;

/**
 * 《功能》
 *
 * @auther HUAWEI
 * @since business V1.0.0
 */
public class Array2BinaryTreeNode {
    // 根据数组构造二叉树的函数
    public static TreeNode array2BinaryTreeNode(int[] nums) {
        if (nums == null || nums.length == 0) {
            return null;
        }
        return construct(nums, 0, nums.length - 1);
    }

    // 递归函数来构建二叉树
    public static TreeNode construct(int[] nums, int start, int end) {
        if (start > end) {
            return null;
        }
        // 创建根节点
        TreeNode node = new TreeNode(nums[start]);
        // 因为数组是前序遍历的，所以第一个元素是根节点
        // 接下来需要找到左子树和右子树的分界点
        int i = start + 1;
        while (i <= end && nums[i] < nums[start]) {
            i++;
        }
        // 递归构建左子树和右子树
        node.left = construct(nums, start + 1, i - 1);
        node.right = construct(nums, i, end);
        return node;
    }

}
